#!/bin/bash

# =============================================================================
# Linux工具箱 - 一键安装脚本集合
# =============================================================================
# 作者: 樱花云官网 sakuraidc.cc
# QQ: 3228696300
# 社区: www.sakuraidc.cc
# 版本: v2.0
# 更新时间: $(date '+%Y-%m-%d')
# =============================================================================

# 设置脚本选项
# set -e  # 遇到错误时退出 (注释掉以避免脚本意外退出)
# set -u  # 使用未定义变量时退出 (注释掉以提高兼容性)

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查网络连接
check_network() {
    if ! ping -c 1 8.8.8.8 >/dev/null 2>&1; then
        log_error "网络连接失败，请检查网络设置"
        exit 1
    fi
}

# 检查系统权限
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log_warn "建议使用root权限运行此脚本以获得最佳体验"
        read -p "是否继续？(y/N): " continue_choice
        if [[ ! "$continue_choice" =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
}

# 显示主菜单
show_menu() {
    echo "==========================="
    echo "Linux工具箱操作菜单"
    echo "==========================="
    echo "by 樱花云官网 sakuraidc.cc"
    echo "QQ：3228696300"
    echo "社区：www.sakuraidc.cc"
    echo "==========================="
    echo
    
    # 系统本地化配置
    echo "【系统本地化】"
    echo "1) 一键安装简体中文"
    echo "2) 一键安装简体中文（备用）"
    echo "5) 一键同步北京时间"
    echo "6) 一键同步北京时间（备用）"
    echo
    
    # 系统资源管理
    echo "【系统资源管理】"
    echo "3) 一键添加swap"
    echo "4) 一键添加swap（备用）"
    echo "7) 通用磁盘挂载脚本"
    echo "8) 通用磁盘挂载脚本（备用）"
    echo
    
    # 软件源配置
    echo "【软件源配置】"
    echo "9) 一键更换大陆源（推荐清华）"
    echo "10) 一键更换海外源"
    echo "19) 一键给cenos失去支持的版本更换源（兼容几乎所有版本）"
    echo
    
    # 网络配置
    echo "【网络配置】"
    echo "12) 修改ssh端口"
    echo "15) 获取服务器ip和归属地"
    echo "20) 一键配置docker加速镜像"
    echo "21) DNS配置工具"
    echo
    
    # 面板安装
    echo "【面板安装】"
    echo "13) 宝塔面板国内版（简体中文）"
    echo "14) 宝塔面板国际版（英语）"
    echo "16) 宝塔面板稳定版（简体中文）"
    echo "17) 安装1Panel"
    echo
    
    # 应用安装
    echo "【应用安装】"
    echo "11) 安装jmal-cloud个人网盘docker（系统盘不能低于40g）"
    echo "18) 安装umami网站统计"
    echo
    
    echo "---------------------------"
    echo "q) 退出"
    echo "==========================="
}

# 执行脚本的安全函数
execute_script() {
    local script_name="$1"
    local script_url="$2"
    local description="$3"
    
    log_info "正在执行: $description"
    
    # 检查网络连接
    check_network
    
    # 下载并执行脚本
    if wget "$script_url" -O "$script_name" 2>/dev/null && chmod +x "$script_name" 2>/dev/null; then
        log_info "脚本下载成功，开始执行..."
        if bash "$script_name"; then
            log_info "$description 执行完成"
        else
            log_error "$description 执行失败"
        fi
        # 清理临时文件
        rm -f "$script_name" 2>/dev/null
    else
        log_error "脚本下载失败，请检查网络连接或URL是否正确"
        return 1
    fi
}

# 主程序循环
main() {
    # 初始检查
    check_root
    
    while true; do
        clear
        show_menu
        
        # 读取用户输入
        echo
        read -p "请输入对应的序列号: " choice
        echo
        
        # 处理用户选择
        handle_choice "$choice"
        
        # 询问是否继续
        if [[ "$choice" != "q" && "$choice" != "Q" ]]; then
            echo
            read -p "按回车键继续，或输入 'q' 退出: " continue_choice
            if [[ "$continue_choice" == "q" || "$continue_choice" == "Q" ]]; then
                log_info "感谢使用Linux工具箱！"
                exit 0
            fi
        fi
    done
}

# 处理用户选择的函数
handle_choice() {
    local choice="$1"
    
    # ==========================================================================
    # 根据用户输入执行相应的脚本
    # ==========================================================================
    case $choice in
        # ----------------------------------------------------------------------
        # 系统本地化配置
        # ----------------------------------------------------------------------
        1)
            execute_script "zh.sh" "https://sakuraidc.cc/upload/attachment/zh.sh" "一键安装简体中文"
            ;;
        2)
            execute_script "zh.sh" "https://gitee.com/wwwwwddzafv/zh/raw/master/zh.sh" "一键安装简体中文（备用）"
            ;;
        5)
            execute_script "bj.sh" "https://sakuraidc.cc/upload/attachment/bj.sh" "一键同步北京时间"
            ;;
        6)
            execute_script "bj.sh" "https://gitee.com/wwwwwddzafv/sj/raw/master/bj.sh" "一键同步北京时间（备用）"
            ;;

        # ----------------------------------------------------------------------
        # 系统资源管理
        # ----------------------------------------------------------------------
        3)
            execute_script "swap1.sh" "https://sakuraidc.cc/upload/attachment/swap1.sh" "一键添加swap"
            ;;
        4)
            execute_script "swap1.sh" "https://gitee.com/wwwwwddzafv/swap/raw/master/swap1.sh" "一键添加swap（备用）"
            ;;
        7)
            execute_script "mkfs.sh" "https://sakuraidc.cc/upload/attachment/mkfs.sh" "通用磁盘挂载脚本"
            ;;
        8)
            execute_script "mkfs.sh" "https://gitee.com/wwwwwddzafv/mkfs/raw/master/mkfs.sh" "通用磁盘挂载脚本（备用）"
            ;;

        # ----------------------------------------------------------------------
        # 软件源配置
        # ----------------------------------------------------------------------
        9)
            log_info "正在执行: 一键更换大陆源（推荐清华）"
            check_network
            curl -sSL https://linuxmirrors.cn/main.sh -o main.sh && chmod +x main.sh && ./main.sh
            rm -f main.sh
            ;;
        10)
            log_info "正在执行: 一键更换海外源"
            check_network
            curl -sSL https://linuxmirrors.cn/main.sh -o main.sh && chmod +x main.sh && ./main.sh --abroad
            rm -f main.sh
            ;;
        19)
            execute_script "yuan.sh" "https://gitee.com/wwwwwddzafv/yuan/raw/master/yuan.sh" "一键给centos失去支持的版本更换源"
            ;;

        # ----------------------------------------------------------------------
        # 网络配置
        # ----------------------------------------------------------------------
        12)
            execute_script "ssh.sh" "https://gitee.com/wwwwwddzafv/ssh/raw/master/ssh.sh" "修改ssh端口"
            ;;
        15)
            log_info "正在获取服务器IP和归属地信息"
            check_network
            curl -s cip.cc || log_error "获取IP信息失败"
            ;;
        20)
            execute_script "dockerjs.sh" "https://gitee.com/wwwwwddzafv/dockerjs/raw/master/dockerjs.sh" "配置docker加速镜像"
            ;;
        21)
            log_info "正在启动DNS配置工具"
            if [ -f "dns_config.sh" ]; then
                chmod +x dns_config.sh
                ./dns_config.sh
            else
                execute_script "dns_config.sh" "https://gitee.com/wwwwwddzafv/dns/raw/master/dns_config.sh" "DNS配置工具"
            fi
            ;;

        # ----------------------------------------------------------------------
        # 面板安装
        # ----------------------------------------------------------------------
        13)
            execute_script "bt.sh" "https://gitee.com/wwwwwddzafv/btcn/raw/master/bt.sh" "宝塔面板国内版"
            ;;
        14)
            execute_script "bten.sh" "https://gitee.com/wwwwwddzafv/btcn/raw/master/bten.sh" "宝塔面板国际版"
            ;;
        16)
            log_info "正在安装宝塔面板稳定版"
            check_network
            url="https://download.bt.cn/install/install_lts.sh"
            if [ -f /usr/bin/curl ]; then
                curl -sSO "$url"
            else
                wget -O install_lts.sh "$url"
            fi
            bash install_lts.sh ltsview ed8484bec
            rm -f install_lts.sh
            ;;
        17)
            log_info "正在安装1Panel"
            check_network
            curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh
            sudo bash quick_start.sh
            rm -f quick_start.sh
            ;;

        # ----------------------------------------------------------------------
        # 应用安装
        # ----------------------------------------------------------------------
        11)
            execute_script "jmal-cloud-server.sh" "https://gitee.com/wwwwwddzafv/jmal-cloud-server/raw/master/jmal-cloud-server.sh" "jmal-cloud个人网盘docker"
            ;;
        18)
            execute_script "umami.sh" "https://gitee.com/wwwwwddzafv/umami/raw/master/umami.sh" "umami网站统计"
            ;;

        # ----------------------------------------------------------------------
        # 退出选项
        # ----------------------------------------------------------------------
        q|Q)
            log_info "感谢使用Linux工具箱！"
            exit 0
            ;;

        # ----------------------------------------------------------------------
        # 无效选项处理
        # ----------------------------------------------------------------------
        *)
            log_error "无效的选项: $choice"
            log_warn "请输入有效的序列号或 'q' 退出"
            ;;
    esac
}

# =============================================================================
# 显示帮助信息
# =============================================================================
show_help() {
    echo "Linux工具箱 v2.0 使用说明"
    echo "========================="
    echo "用法: bash $0 [选项]"
    echo
    echo "选项:"
    echo "  -h, --help     显示此帮助信息"
    echo "  -v, --version  显示版本信息"
    echo
    echo "功能模块:"
    echo "  系统本地化: 中文安装、时间同步"
    echo "  资源管理:   swap配置、磁盘挂载"
    echo "  软件源:     更换国内外软件源"
    echo "  网络配置:   SSH端口、DNS配置、Docker镜像"
    echo "  面板安装:   宝塔面板、1Panel"
    echo "  应用安装:   个人网盘、网站统计"
    echo
    echo "作者: 樱花云 sakuraidc.cc"
    echo "QQ: 3228696300"
    echo "社区: www.sakuraidc.cc"
}

# 显示版本信息
show_version() {
    echo "Linux工具箱 v2.0"
    echo "更新时间: $(date '+%Y-%m-%d')"
    echo "作者: 樱花云 sakuraidc.cc"
}

# =============================================================================
# 启动主程序
# =============================================================================

# 处理命令行参数
case "${1:-}" in
    -h|--help)
        show_help
        exit 0
        ;;
    -v|--version)
        show_version
        exit 0
        ;;
    "")
        # 无参数，正常启动
        ;;
    *)
        log_error "未知参数: $1"
        echo "使用 -h 或 --help 查看帮助信息"
        exit 1
        ;;
esac

# 启动主程序
main
